package hee;

import hee.model.SungJuk2VO;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class J19ArrayList {

	public static void main(String[] args) {

		// ArrayList
		// 실무에서 빈번하게 사용되는 컬렉션 객체중 하나
		// 배열과 달리 **데이터 갯수에 따라 크기가 유동적으로 변함
		// 동일한 값을 여러 개 저장할 수 있고,
		// 입력되는 값들은 순서를 가짐**

		ArrayList<String> woman = new ArrayList<>();
		ArrayList<SungJuk2VO> sj = new ArrayList<>();

		// 추가 : add 사용
		woman.add("태희");
		woman.add("혜교");
		woman.add("지현");
		sj.add(new SungJuk2VO("태희", 99, 97, 88));
		sj.add(new SungJuk2VO("혜교", 80, 85, 88));
		sj.add(new SungJuk2VO("지현", 70, 75, 78));
		sj.add(new SungJuk2VO("기억", 60, 75, 78));
		// 하나씩 조회 get(위치)
		System.out.println(woman.get(0));
		System.out.println(woman.get(1));
		System.out.println(woman.get(2));

		// 몽땅 출력 (for-each문 사용)
		// 예)ArrayList<a>b = new ArrayList<>();
		// for(a ??? : b){}
		// for(요소 유형 요소명: arraylist 객체명)
		for (String str : woman) {
			System.out.println(str);
		} // woman 이라는 컬렉션 안에 String str 으로 하나 끄집어서 출력
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}

		System.out.println();

		// SungJuk2의 toString()의 의해 출력
		System.out.println(sj.get(0).getName());
		System.out.println(sj.get(1)); // sj.get는 성적2vo의 toString을 불러서 실행
		System.out.println(sj.get(2));
		// (sj.get(0).getName())은 SungJuk2VO에 getName

		// 출력
		// 태희
		// hee.model.SungJuk2VO@129b922
		// hee.model.SungJuk2VO@39a867

		// 수정하기(이름 바꿔서 출력) set(위치,값)
		System.out.println(woman.get(1));
		woman.set(1, "수지"); // index는 1의 위치를 바꾼다는 뜻, 수지는 String 문자열
		System.out.println(woman.get(1));
		System.out.println();

		SungJuk2VO newOne = new SungJuk2VO("수정", 78, 32, 45);
		System.out.println(sj.get(2));
		sj.set(2, newOne);
		System.out.println(sj.get(2));

		// 삭제 remove(위치)
		woman.remove(1);
		sj.remove(2);
		for (String str : woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}

		// 포함여부 확인 : contains/indexOf
		String key = "지현";
		woman.contains("key");
		if (woman.contains(key)) {
			System.out.println("데이터가 존재합니다");
			System.out.println("위치는" + woman.indexOf(key));
		} else {
			System.out.println("데이터가 없어요");
		}

		// 객체를 대상으로 정렬하려면
		// Comparator라는 인터페이스를 구현하고
		// Collections.sort(대상,정렬기준);
		// 으로 호출해서 사용해야 함
		Collections.sort(sj,new NameSort());
		for(SungJuk2VO s: sj){
			System.out.println(s);
		}

		// 모두삭제 clear
		// woman.clear();
		// sj.clear();
		// for(String str : woman){System.out.println(str);}

		// 가나다순 정렬 sort
		Collections.sort(woman);
		for (String str : woman) {
			System.out.println(str);
		}

		// 출력
		// 태희 지현 이였는데
		// 지현 태희로 바뀜

		key = "수지";
		for (SungJuk2VO s : sj) { // sj 중에서 SungJuk2VO불러와서 key의 이름이 있는지 검색
			if (sj.get(0).getName().contains(key)) { // sj는 주소, 주소 1번째 이름을
														// 불러오는것.
				System.out.println("찾았어요");
			} else {
				System.out.println("못찾았어요");
			}
		}
	}
}

class NameSort implements Comparator<SungJuk2VO> {

	@Override
	public int compare(SungJuk2VO sj1, SungJuk2VO sj2) {

		return sj1.getName().compareTo(sj2.getName());
	}
}
